package algorithm7.leetcode.每日一题.YEAR2023.month5;

import org.junit.jupiter.api.Test;

public class DAY20230509_LC2437 {

    /*

给你一个长度为 5 的字符串 time ，表示一个电子时钟当前的时间，格式为 "hh:mm" 。最早 可能的时间是 "00:00" ，最晚 可能的时间是 "23:59" 。

在字符串 time 中，被字符 ? 替换掉的数位是 未知的 ，被替换的数字可能是 0 到 9 中的任何一个。

请你返回一个整数 answer ，将每一个 ? 都用 0 到 9 中一个数字替换后，可以得到的有效时间的数目。


示例 1：
输入：time = "?5:00"
输出：2
解释：我们可以将 ? 替换成 0 或 1 ，得到 "05:00" 或者 "15:00" 。注意我们不能替换成 2 ，因为时间 "25:00" 是无效时间。所以我们有两个选择。

     */

    int countTime(String time) {
//        return handle1(time);
        return handle2(time);
    }

    private int handle2(String time) {
        int ans = 0;
        for (int h = 0; h < 24; ++h) {
            for (int m = 0; m < 60; ++m) {
                String s = String.format("%02d:%02d", h, m);
                int ok = 1;
                for (int i = 0; i < 5; ++i) {
                    if (s.charAt(i) != time.charAt(i) && time.charAt(i) != '?') {
                        ok = 0;
                        break;
                    }
                }
                ans += ok;
            }
        }
        return ans;
    }

    private int handle1(String time) {
        int hhc = 0;
        int mmc = 0;
        String hh = time.substring(0, 2);
        if ('?' == (hh.charAt(0))) {
            if ('?' == (hh.charAt(1))) {
                hhc = 24;
            } else {
                Integer t = Integer.valueOf(String.valueOf(hh.charAt(1)));
                for (int i = 0; i < 10; i++) {
                    if (i * 10 + t <= 23) {
                        hhc++;
                        continue;
                    }
                    break;
                }
            }
        } else {
            if ('?' == (hh.charAt(1))) {
                Integer t = Integer.valueOf(String.valueOf(hh.charAt(0)));
                for (int i = 0; i < 10; i++) {
                    if (t * 10 + i <= 23) {
                        hhc++;
                        continue;
                    }
                    break;
                }
            }
        }

        String mm = time.substring(3, 5);
        if ('?' == mm.charAt(0)) {
            if ('?' == mm.charAt(1)) {
                mmc = 60;
            } else {
                Integer t = Integer.valueOf(String.valueOf(mm.charAt(1)));
                for (int i = 0; i < 10; i++) {
                    if (i * 10 + t < 60) {
                        mmc++;
                        continue;
                    }
                    break;
                }
            }
        } else {
            if ('?' == (mm.charAt(1))) {
                Integer t = Integer.valueOf(String.valueOf(mm.charAt(0)));
                for (int i = 0; i < 10; i++) {
                    if (t * 10 + i < 60) {
                        mmc++;
                        continue;
                    }
                    break;
                }
            }
        }

        return (hhc == 0 ? 1 : hhc) * (mmc == 0 ? 1 : mmc);
    }


    @Test
    void t1() {
        String time = "00:?0";
        int res = countTime(time);
        System.out.println("res = " + res);

    }

}
